package com.pactera.madp.cp.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.pactera.madp.cp.api.dto.moments.MomentsPageDTO;
import com.pactera.madp.cp.api.dto.moments.MomentsTaskAddDTO;
import com.pactera.madp.cp.api.dto.moments.MomentsTaskUpdateDTO;
import com.pactera.madp.cp.api.entity.CpMomentsTaskEntity;
import com.pactera.madp.cp.api.vo.moments.MomentsDetailsVO;
import com.pactera.madp.cp.api.vo.moments.MomentsPageVO;
import com.pactera.madp.cp.api.vo.moments.MomentsTaskDetailsPageVO;
import com.pactera.madp.cp.api.vo.moments.MomentsTaskDetailsVO;

/**
 * 朋友圈任务表(CpMomentsTask)表服务接口
 *
 * @author jun.lei
 * @since 2022-05-13 10:15:47
 */
public interface CpMomentsTaskService extends IService<CpMomentsTaskEntity> {

    /**
     * 新增朋友圈任务
     * @param dto
     * @return 是否新增成功
     */
    boolean saveMomentsTask(MomentsTaskAddDTO dto);

    /**
     * 编辑朋友圈任务
     * @param dto
     * @return 是否编辑成功
     */
    boolean updateMomentsTask(MomentsTaskUpdateDTO dto);

    /**
     * 朋友圈任务分页
     * @param dto
     * @param page
     * @return 分页的数据
     */
    Page<MomentsPageVO> getMomentPage(MomentsPageDTO dto, Page page);

    /**
     * 朋友圈任务审核分页
     * @param dto
     * @param page
     * @return 分页的数据
     */
    Page<MomentsPageVO> getMomentApprovalPage(MomentsPageDTO dto, Page page);

    /**
     * 发布朋友圈任务
     * @param id
     * @return 是否发布成功
     */
    boolean releaseMomentsTask(Integer id);

    /**
     * 审批朋友圈任务
     * @param id
     * @return 是否发布成功
     */
    boolean approval(Integer id, String  opinion, Integer state);

    /**
     * 获取朋友圈任务详情
     * @param id
     * @return 返回朋友圈的任务详情
     */
    MomentsDetailsVO getMomentsDetails(Integer id);

    /**
     * 朋友圈任务撤销
     * @param id
     */
    Boolean revoke(Integer id);

    /**
     * 修改朋友圈任务状态
     */
    void updateStatus();

    /**
     * 朋友圈任务详情
     * @param id
     * @return 返回朋友圈任务成员完成情况
     */
    MomentsTaskDetailsVO getMomentsDetailsAll(Integer id);

    /**
     * 定时同步朋友圈任务详情
     */
    void synMomentsTaskDetails();

    /**
     * 朋友圈任务详情-分页
     * @param id
     * @param page
     * @param name
     * @return 返回朋友圈任务成员完成情况分页数据
     */
    Page<MomentsTaskDetailsPageVO> getMomentTaskDetailsPage(Integer id,Page page,String name);

    /**
     * 删除过期30天的任务
     */
    void deleteOverdueTasks();

}
